package do

import (
	"fmt"
	"time"

	"gorm.io/gorm"
)

type PersonType int

const (
	PersonType_SupermarketDirector PersonType = 1 // 超市负责人
)

func (p PersonType) String() string {
	switch p {
	case PersonType_SupermarketDirector:
		return "商场负责人"
	default:
		return fmt.Sprintf("不支持的人员类型:%d", p)
	}
}

// person "人员"的通用表示
// TODO name+type 是联合唯一索引
type Person struct {
	ID int `gorm:"primarykey"`

	// 人员姓名
	Name string `gorm:"type:varchar(255);column:name;NOT NULL;uniqueIndex:idx_name_type"`
	// 备注
	Note string

	// 人员类别
	Type PersonType `gorm:"type:int;column:type;NOT NULL;uniqueIndex:idx_name_type"`

	CreatedAt time.Time `gorm:"autoCreateTime;type:datetime(0)"`
	UpdatedAt time.Time `gorm:"autoUpdateTime;type:datetime(0)"`
}

func (*Person) TableName() string {
	return "person"
}

func (p *Person) BeforeSave(tx *gorm.DB) (err error) {
	if p.Name == "" {
		return fmt.Errorf("人员姓名不能为空")
	}

	switch p.Type {
	case PersonType_SupermarketDirector:
	default:
		return fmt.Errorf("人员类别不能非法:%v", p.Type)
	}
	return nil
}
